/**
 * \defgroup FineCollection Fine Collections
 **/

/**
 * Fine Collection interfaces.
 * 
 * This namespace contains generic interfaces for collections.
 * 
 * Interface naming conventions:
 *   - <c><b>R</b>Collection</c>: interface names started with the \b R character
        *                         represent read-only collection,
 *   - <c><b>W</b>Collection</c>: interface names started with the \b W character
 *                                represent writeable collection.
 * 
 * \ingroup BeneCollections
 **/
namespace FineCollection.Intf
{
    /// <summary>
    /// Generic collection (read only interface).
    /// </summary>
    /// <typeparam name="T">type of an item.</typeparam>
    public interface RCollection<T>
        : System.Collections.Generic.IEnumerable<T>
    {

        /// <summary>
        /// Count of items in the list.
        /// </summary>
        int Count
        {
            get;
        }


        /// <summary>
        /// Checks whether the collection is empty.
        /// </summary>
        bool IsEmpty
        {
            get;
        }


        /// <summary>
        /// Checks whether the collection has at least one item.
        /// </summary>
        bool IsNotEmpty
        {
            get;
        }


        /// <summary>
        /// Creates a read-only iterator.
        /// </summary>
        /// <returns></returns>
        RIterator<T> TakeIterator();

    }
    
    
}
